#-------------------------------------------------------------------------------
#
#  Test the DockWindow.
#
#  Written by: David C. Morrill
#
#  Date: 10/20/2005
#
#  (c) Copyright 2005 by Enthought, Inc.
#
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
#  Imports:
#-------------------------------------------------------------------------------

import wx

from traits.api \
    import *

from traitsui.api \
    import *

from traitsui.menu \
    import *

from pyface.image_resource \
    import ImageResource

from pyface.dock.api \
    import *

#-------------------------------------------------------------------------------
#  Global data:
#-------------------------------------------------------------------------------

# DockControl style to use:
style = 'tab'

image1 = ImageResource( 'folder' )
image2 = ImageResource( 'gear' )

#-------------------------------------------------------------------------------
#  Creates a DockWindow as a Traits UI widget:
#-------------------------------------------------------------------------------

def create_dock_window ( parent, editor ):
    """ Creates a window for editing a workflow canvas.
    """
    main     = DockWindow( parent ).control
    views    = [ wx.Button( main, -1, 'View %d' % (i + 1) )
                 for i in range( 6 ) ]
    edit     = DockWindow( main ).control
    editors  = [ wx.Button( edit, -1, 'Editor %d' % (i + 1) )
                 for i in range( 6 ) ]
    controls = [ DockControl( name      = 'Editor %d' % (i + 1),
                              image     = image1,
                              closeable = True,
                              control   = editors[i],
                              style     = style )
                 for i in range( 6 ) ]
    controls[0].export = 'any'
    edit_sizer = DockSizer( contents = [ tuple( controls ) ] )
    main_sizer = DockSizer( contents =
                  [ [ DockControl( name      = 'View 1',
                                   image     = image1,
                                   closeable = True,
                                   control   = views[0],
                                   style     = style ),
                      DockControl( name      = 'View 2',
                                   image     = image1,
                                   closeable = True,
                                   height    = 400,
                                   control   = views[1],
                                   style     = style ) ],
                    [ DockControl( name      = 'Editors',
                                   image     = image1,
                                   control   = edit,
                                   style     = 'fixed' ),
                      [ DockControl( name    = 'View 3',
                                     image   = image2,
                                     control = views[2],
                                     style   = style ),
                        DockControl( name    = 'View 4',
                                     image   = image2,
                                     control = views[3],
                                     style   = style ) ] ],
                    [ DockControl( name      = 'View 5',
                                   control   = views[4],
                                   style     = style ),
                      DockControl( name      = 'View 6',
                                   control   = views[5],
                                   style     = style ) ] ] )
    edit.SetSizer( edit_sizer )
    main.SetSizer( main_sizer )

    return main

#-------------------------------------------------------------------------------
#  'EnvisageDock' class:
#-------------------------------------------------------------------------------

class EnvisageDock ( HasPrivateTraits ):

    #---------------------------------------------------------------------------
    #  Trait definitions:
    #---------------------------------------------------------------------------

    dummy = Int

    #---------------------------------------------------------------------------
    #  Traits view definitions:
    #---------------------------------------------------------------------------

    view = View( [ Item( 'dummy',
                         resizable = True,
                         editor    = CustomEditor( create_dock_window ) ),
                   '|<>' ],
                 title     = 'Envisage DockWindow Mock-up',
                 resizable = True,
                 width     = 1.00,
                 height    = 1.00,
                 buttons   = NoButtons )

#-------------------------------------------------------------------------------
#  Run the test program:
#-------------------------------------------------------------------------------

if __name__ == '__main__':
    EnvisageDock().configure_traits()
